package pckDao;

import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import pckEntidad.Cliente;
import pckUtil.Conexion;


public class ClienteDao implements Serializable {
    
    private Conexion oConexion=new Conexion();
    private Cliente oCliente = null;
    private List<Cliente> lisCliente=null;
    
    public Cliente obtener(String codigo) {
         String sql = "select * from tblCliente where idClie=?";
        try {
            PreparedStatement pst = oConexion.getConnection().prepareStatement(sql);                
            pst.setString(1, codigo);
            ResultSet rst = pst.executeQuery();
            
            while(rst.next()){
                oCliente=new Cliente();
                oCliente.setIdclie(rst.getString(1));
                oCliente.setApelpatcli(rst.getString(2));
                oCliente.setApelmatcli(rst.getString(3));
                oCliente.setNombcli(rst.getString(4));
                oCliente.setDnicli(rst.getString(5));
                oCliente.setRuccli(rst.getString(6));
                oCliente.setSexcli(rst.getString(7));
                oCliente.setDirecli(rst.getString(8));
                oCliente.setFechnaccli(rst.getString(9));
                oCliente.setEmaicli(rst.getString(10));
                oCliente.setEstacli(rst.getString(11));
                oCliente.setTelfcli(rst.getString(12));
            }
            return  oCliente;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
    
    public void insertar(Cliente oCli){
         String sql = "{call sping_Cliente(?,?,?,?,?,?,?,?,?,?,?)}";
         CallableStatement cst;
        try {
            cst = oConexion.getConnection().prepareCall(sql);
            cst.setString(1, oCli.getApelpatcli());
            cst.setString(2, oCli.getApelmatcli());
            cst.setString(3, oCli.getNombcli());
            cst.setString(4, oCli.getDnicli());
            cst.setString(5, oCli.getRuccli());
            cst.setString(6, oCli.getSexcli());
            cst.setString(7, oCli.getDirecli());
            cst.setString(8, oCli.getFechnaccli());
            cst.setString(9, oCli.getEmaicli());
            cst.setString(10, oCli.getEstacli());
            cst.setString(11, oCli.getTelfcli());
            cst.execute();            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
           
     }
    
            
    public List<Cliente> listar(){
    String sql = "{call splis_Cliente}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql);
            ResultSet rst = cst.executeQuery();
            lisCliente= new ArrayList<Cliente>();
            while(rst.next()){
                oCliente = new Cliente();
                oCliente.setIdclie(rst.getString(1)); 
                oCliente.setNombcli(rst.getString(2));
                oCliente.setApelpatcli(rst.getString(3));
                oCliente.setApelmatcli(rst.getString(4));
                oCliente.setDnicli(rst.getString(5));
                oCliente.setRuccli(rst.getString(6));
                oCliente.setTelfcli((rst.getString(7)));
                oCliente.setEmaicli(rst.getString(8));
                oCliente.setDirecli(rst.getString(9));                
                lisCliente.add(oCliente);
            }
            return  lisCliente;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
    
    
    public void actualizar( Cliente oCli){
        try {
            String sql = "{call spact_tblCliente(?,?,?,?,?,?,?,?,?,?,?,?)}";
            CallableStatement cst = oConexion.getConnection().prepareCall(sql);
            cst.setString(1, oCli.getIdclie());
            cst.setString(2, oCli.getApelpatcli());
            cst.setString(3, oCli.getApelmatcli());
            cst.setString(4, oCli.getNombcli());
            cst.setString(5, oCli.getDnicli());
            cst.setString(6, oCli.getRuccli());
            cst.setString(7, oCli.getSexcli());
            cst.setString(8, oCli.getDirecli());
            cst.setString(9, oCli.getFechnaccli());
            cst.setString(10, oCli.getEmaicli());
            cst.setString(11, oCli.getEstacli());
            cst.setString(12, oCli.getTelfcli());
            cst.execute();
            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         
     }
    
    public void desactivar(String idCli){
    try{
        String sql="{call spdes_Cliente(?)}";
        CallableStatement cst=oConexion.getConnection().prepareCall(sql);
        cst.setString(1,idCli);
        cst.execute();
    }catch(SQLException ex){
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
         
    }
    
    
    public Cliente buscarDni(String dni) {
         
         String sql = "{call spbus_clienteDni (?)}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql); 
            cst.setString(1, dni);
            ResultSet rst = cst.executeQuery();
            boolean encontro=false;
            while(rst.next()){
                oCliente=new Cliente();
                oCliente.setIdclie(rst.getString(1));
                oCliente.setNombcli(rst.getString(2));
                oCliente.setApelpatcli(rst.getString(3));
                oCliente.setApelmatcli(rst.getString(4));
                oCliente.setDnicli(rst.getString(5));
                oCliente.setRuccli(rst.getString(6));
                oCliente.setTelfcli(rst.getString(7));  
                oCliente.setEmaicli(rst.getString(8));
                oCliente.setDirecli(rst.getString(9));
                encontro=true;
            }
             if (!encontro) {
                JOptionPane.showMessageDialog(null, " Cliente no encontrado ");
            }
            return  oCliente;
           
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
    public Cliente buscarRuc(String ruc) {
         
         String sql = "{call spbus_clienteDni (?)}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql); 
            cst.setString(1, ruc);
            ResultSet rst = cst.executeQuery();
            boolean encontro=false;
            while(rst.next()){
                oCliente=new Cliente();
                oCliente.setIdclie(rst.getString(1));
                oCliente.setNombcli(rst.getString(2));
                oCliente.setApelpatcli(rst.getString(3));
                oCliente.setApelmatcli(rst.getString(4));
                oCliente.setDnicli(rst.getString(5));
                oCliente.setRuccli(rst.getString(6));
                oCliente.setTelfcli(rst.getString(7));  
                oCliente.setEmaicli(rst.getString(8));
                oCliente.setDirecli(rst.getString(9));
                encontro=true;
            }
             if (!encontro) {
                JOptionPane.showMessageDialog(null, " Cliente no encontrado ");
            }
            return  oCliente;
           
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }

}
